package com.hzlj.position.dbsync.liaoning.common.dto.zhizunWd.request;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fz.common.base.exception.PubException;
import com.hzlj.position.config.common.dto.common.PositionAddDTO;
import com.hzlj.position.config.common.enums.WarningType;
import com.hzlj.position.dbsync.common.convert.PositionAddConvert;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;

@Slf4j
@Data
@NoArgsConstructor
public class ZhizunWdBaseNotifyDTO {
    /**
     * 1.SOS推送
     * 2.体温、心率、血压、血氧推送（H.心率 O.血氧 W.体温 X.高压 Y.低压 根据是否有对应的返回字段来判断接收到推送的数据类型，有可能同时推送多种类型的数据）
     * 3.定位推送
     * 4.通知推送 【再根据Action字段的值来判断是哪种通知类型 Action（通知类型）:
     * 4为在围栏内停留；5离开围栏；6进入围栏；7.SOS报警；9低电报警；10摘除报警；11跌倒报警；22为低温报警；23为高温报警；24更换SIM卡；26断开wifi；27连接wifi；28wifi离线；35社区（居家）养老设备报警；36防盗设备报警；37状态通知告警；42八件套布防告警；43八件套撤防告警；44八件套在家布防告警；
     * 45八件套报警告警（451：门磁告警；452：烟感告警；453：红外告警；454：气感告警；455：一氧化碳告警；456：紧急按钮告警；457：防拆告警；458：水浸告警；459：红外对射告警；450A：断电告警；45FF：网关告警）；
     * 84八件套网关离线；85八件套网关上线；86八件套添加子设备；87八件套删除子设备；47表示设备wifi不一致报警；-1(设备在线离线状态改变通知 OL：0.离线,1.在线)】；49是红外报警（带图片Img，如有位置则也会带上位置参数）；50是NB设备按键报警；51是NB防拆报警；52是NB报警复位或者设备恢复正常（NB报警默认没有位置参数返回）；61NB设备报警；67NB设备测试报警；200 app绑定的设备昵称、手机号、分组、签名、地址信息；113门磁事件上报；114烟感、气感、门磁事件上报；115表示拉绳SOS设备上报；116为SCA设备事件上报；117为4G视频门磁事件上报；118为防跌倒雷达设备事件上报
     * 5.消息已读推送【（Action表示消息类型）7.SOS消息，11.跌倒报警】
     * 6.计步翻转次数推送
     * 7.进出围栏推送
     * 8.微聊语音推送
     * 9.睡眠带报警消息推送【（Action表示消息类型）68.睡眠仪心率过速 69.睡眠仪心率过缓 70.呼吸过速 71.呼吸过缓 72.睡眠仪离床报警 73.睡眠仪一健报警 74.离线报警】
     * 10.睡眠带心率、呼吸等数据推送
     * 11.睡眠带睡眠报告推送
     * 12.手表睡眠数据推送
     * 13.手表心率HRV数据推送
     */
    @JsonProperty("pushType")
    private Integer pushType;
    @JsonProperty("MID")
    private String mid;
    @JsonProperty("Action")
    private Integer action;
    @JsonProperty("Lon")
    private BigDecimal lon;
    @JsonProperty("Lat")
    private BigDecimal lat;
    @JsonProperty("Pro")
    private String pro;
    @JsonProperty("City")
    private String city;
    @JsonProperty("Dist")
    private String dist;
    @JsonProperty("Str")
    private String str;

    /**
     * 定位
     */
    public boolean isLocation() {
        return 3 == pushType;
    }

    /**
     * 拆卸
     */
    public boolean isDemount() {
        return 4 == pushType
                && action != null
                && ObjectUtil.equal(action, 457);
    }

    /**
     * 摘除
     */
    public boolean isRemove() {
        return 4 == pushType
                && action != null
                && ObjectUtil.equal(action, 10);
    }

    /**
     * 低电
     */
    public boolean isLowbat() {
        return 4 == pushType
                && action != null
                && ObjectUtil.equal(action, 9);
    }

    public PositionAddDTO convert(WarningType warningType) {
        return PositionAddConvert.convert(
                false,
                warningType,
                this.getMid(),
                this.getLon(),
                this.getLat(),
                this.getTime(),
                null,
                StrUtil.format("{}{}{}{}",
                        ObjectUtil.defaultIfNull(this.getPro(), ""),
                        ObjectUtil.defaultIfNull(this.getCity(), ""),
                        ObjectUtil.defaultIfNull(this.getDist(), ""),
                        ObjectUtil.defaultIfNull(this.getStr(), ""))

        );
    }

    public String getTime() {
        throw new PubException("需要继承该类:geTime");
    }

}
